package com.example.demo;

import com.formdev.flatlaf.FlatLightLaf;
import org.springframework.boot.WebApplicationType;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.scheduling.annotation.EnableScheduling;

import javax.swing.*;
import java.awt.*;

@EntityScan("com.example.demo.demos.entity")
@ComponentScan(basePackages = {"com.example.demo.demos"})
@EnableScheduling
@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        // 在创建任何Swing组件之前设置FlatLaf外观
        setupFlatLaf();

        // 启动Spring Boot应用，不启动Web服务器
        ConfigurableApplicationContext context = new SpringApplicationBuilder(DemoApplication.class)
                .web(WebApplicationType.NONE)
                .run(args);

        // 在事件调度线程中启动Swing界面
        SwingUtilities.invokeLater(() -> {
            // 从Spring上下文获取主窗口并显示
            com.example.demo.demos.gui.MainFrame mainFrame = context.getBean(com.example.demo.demos.gui.MainFrame.class);
            mainFrame.setVisible(true);
        });
    }

    /**
     * 配置FlatLaf外观，修复中文乱码
     */
    private static void setupFlatLaf() {
        try {
            // 设置FlatLaf主题
            UIManager.setLookAndFeel(new FlatLightLaf());

            // 配置全局UI属性，使用支持中文的字体
            // 优先使用微软雅黑，其次使用系统默认字体，确保中文正常显示
            Font defaultFont = new Font("Microsoft YaHei", Font.PLAIN, 13);
            // 如果微软雅黑不可用，使用系统默认字体
            if (defaultFont.getFamily().equals("Dialog")) {
                defaultFont = new Font("SimSun", Font.PLAIN, 13); // 宋体 fallback
            }

            UIManager.put("defaultFont", defaultFont);
            UIManager.put("Label.font", defaultFont);
            UIManager.put("Button.font", defaultFont);
            UIManager.put("Table.font", new Font("Microsoft YaHei", Font.PLAIN, 12));

            // 组件特定属性
            UIManager.put("Button.arc", 6); // 按钮圆角
            UIManager.put("Component.focusWidth", 1); // 焦点边框宽度
            UIManager.put("Component.focusColor", new Color(66, 153, 225)); // 焦点颜色
        } catch (UnsupportedLookAndFeelException e) {
            System.err.println("无法设置FlatLaf外观: " + e.getMessage());
        }
    }
}
